/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logical;

/**
 *
 * @author julien
 */
public abstract class LogicalElement {

    protected boolean negate; // Présence d'un Not sur l'élément logique

    public boolean isNegate() {
        return negate;
    }

    //Ajout d'un NOT sur l'élément
    public void negateElement() {
        negate = true;
    }

    //Suppression du NOT sur l'élément
    public void assertElement() {
        negate = false;
    }

    //Fourni une traduction en français de la formule
    public abstract String getLiteralTranslation();

    //Fourni une version simplifiée de la formule (Latex)
    public abstract String getLatexTranslation();

    //Fourni une version CNF de la formule pour l'utilisation de SAT
    public abstract String getSATTranslation();

    //Donne le nombre d'atomes de l'élément logique
    //1 par défaut et doit être réimplémenté pour les formules
    public Integer getNumberofAtoms(boolean takeCareAboutDublicate){
        return 1;
    };
    
    //Donne la version equivalente CNF de l'élément
    public abstract LogicalElement getCNFForm ();
}
